package doublePointer;

public class ValidPalindrome {

    /**
     * LeetCode T680 验证回文字符串2
     * 给定一个非空字符串 s，最多删除一个字符。判断是否能成为回文字符串。
     * @param args
     */
    public static void main(String[] args) {

    }

    public boolean validPalindrome(String s) {
        int len = s.length();
        int left = 0;
        int right = len - 1;
        //设置标记位，标记是否已经删除过字符串
        boolean flag = false;
        //第一次遍历，删除左侧字符串
        while (left < right){
            if (s.charAt(left) != s.charAt(right)){
                //删除一个左边字符
                if (!flag){
                    flag = true;
                    left++;
                } else {
                    break;
                }
            } else {
                left++;
                right--;
            }
        }
        //如果是回文字符串，返回true
        if (left >= right){
            return true;
        }
        //初始化
        left = 0;
        right = len - 1;
        flag = false;
        //第二次遍历，删除右侧字符串
        while (left < right){
            if (s.charAt(left) != s.charAt(right)){
                //删除一个右边字符
                if (!flag){
                    flag = true;
                    right--;
                } else {
                    return false;
                }
            } else {
                left++;
                right--;
            }
        }
        return true;

    }
}
